CloudFormation으로 Config Rule 구축해보기
소개
안녕하세요! 클래스메소드 금상원 입니다. 이번 블로그에서는 CloudFormation으로 Config Rule을 구축하는 방법에 대한 설명을 하려고 합니다.
목표
Config Rule를 사용하여 AWF의 로깅체크와 문제해결을 CloudFormation을 사용하여 구축해보자!
Config Rule 템플릿파일 작성(YAML)
ConfigRule: Type: AWS::Config::ConfigRule Properties: ConfigRuleName: Wafv2LoggingEnabled MaximumExecutionFrequency: One_Hour Scope: ComplianceResourceTypes: - "AWS::WAFv2::WebACL" Source: Owner: AWS SourceIdentifier: "WAFV2_LOGGING_ENABLED"
ConfigRule
이라는 새로운 리소스를 작성합니다.- Type에는
AWS::Config::ConfigRule
을 입력합니다. - Properties
ConfigRuleName
을 작성하여 ConfigRule이름을 정해줍니다.MaximumExecutionFrequency
을 작성하여 규칙에 대한 평가를 실행하는 최대 빈도를 설정합니다.
허용값)One_Hour | Six_Hours | Three_Hours | Twelve_Hours | TwentyFour_Hours
Scope
을 작성하여 규칙에 대한 평가를 트리거할 수 있는 리소스를 정의합니다.Source
을 작성하여 소유자와 어떤 규칙을 사용할 지 설정합니다.
Config Rule 문제해결 템플릿파일 작성(YAML)
ConfigRuleRemediation: Type: AWS::Config::RemediationConfiguration Properties: Automatic: True ConfigRuleName: Wafv2LoggingEnabled Parameters: AutomationAssumeRole: StaticValue: Values: - !GetAtt [ ConfigSSMAutomationRole, Arn ] LogDestinationConfigs: StaticValue: Values: - !Ref S3BuketName WebAclArn: ResourceValue: Value: "RESOURCE_ID" MaximumAutomaticAttempts: 5 ResourceType: "AWS::WAFv2::WebACL" RetryAttemptSeconds: 60 TargetId: "EnableWAFV2Logging" TargetType: "SSM_DOCUMENT" TargetVersion: "1"
ConfigRuleRemediation
이라는 새로운 리소스를 작성합니다.- Type에는
AWS::Config::RemediationConfiguration
을 입력합니다. - Properties
Automatic
을 사용하여 수정을 자동으로 트리거 되도록 설정 가능합니다.ConfigRuleName
을 작성하여 어떤 ConfigRule에 대한 것인지 작성합니다.Parameters
를 작성하여 필요한 값을 입력하거나 !GetAtt, !Ref와 같은 함수를 사용하여 불러옵니다.MaximumAutomaticAttempts
를 작성하여 자동 수정 시도의 최대 실패 횟수를 설정합니다. (기본으로 5로 설정 되어있습니다.)ResourceType
을 작성하여 리소스 유형을 작성합니다.RetryAttemptSeconds
을 작성하여 AWS Config가 자동 수정을 실행하는 최대 시간(초)를 설정합니다. (기본으로 60초로 설정되어있습니다.)TargetId
를 작성하여 어떤 SSM Automation 문서를 참조하는지를 설정합니다. (SSM Automation 문서의 이름)TargetType
대상의 유형입니다. 허용값)SSM_DOCUMENT
TargetVersion
어떤 SSM Automation문서의 버전을 사용할지 설정합니다.
전체 코드
AWSTemplateFormatVersion: "2010-09-09" Resources: ConfigSSMAutomationRole: Type: AWS::IAM::Role Properties: RoleName: "WafV2LoggingFullAccess" AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: ssm.amazonaws.com Action: - "sts:AssumeRole" Path: "/" ManagedPolicyArns: - "arn:aws:iam::aws:policy/AmazonS3FullAccess" - "arn:aws:iam::aws:policy/AmazonSSMFullAccess" - "arn:aws:iam::aws:policy/AWSWAFFullAccess" ConfigRule: Type: AWS::Config::ConfigRule Properties: ConfigRuleName: Wafv2LoggingEnabled MaximumExecutionFrequency: One_Hour Scope: ComplianceResourceTypes: - "AWS::WAFv2::WebACL" Source: Owner: AWS SourceIdentifier: "WAFV2_LOGGING_ENABLED" ConfigRuleRemediation: Type: AWS::Config::RemediationConfiguration Properties: Automatic: True ConfigRuleName: Wafv2LoggingEnabled Parameters: AutomationAssumeRole: StaticValue: Values: - !GetAtt [ ConfigSSMAutomationRole, Arn ] LogDestinationConfigs: StaticValue: Values: - !Ref S3BuketName WebAclArn: ResourceValue: Value: "RESOURCE_ID" MaximumAutomaticAttempts: 5 ResourceType: "AWS::WAFv2::WebACL" RetryAttemptSeconds: 60 TargetId: "EnableWAFV2Logging" TargetType: "SSM_DOCUMENT" TargetVersion: "1"
마무리
이번 블로그에서는 CloudFormation으로 Config Rule을 구축하고, WAF의 로깅 활성화를 체크하고 자동으로 로깅을 활성화 시키는 작업을 해보았습니다. 평소에 Config Rule을 CloudFormation으로 작성하고 싶으신분들에게 도움이 되었으면 합니다.